package com.ryskoo.customer.customer.service;

import com.ryskoo.customer.customer.domain.CustomerPO;
import com.ryskoo.framework.core.bean.QueryMessageDTO;
import com.ryskoo.framework.core.exception.InvalidParamException;
import com.ryskoo.framework.core.service.IBasicService;

import java.util.List;
import java.util.Map;

/**
 * 会员业务接口
 *
 * @author huanghe
 */
public interface ICustomerService extends IBasicService<CustomerPO> {

    /**
     * 商户后台 - 新增会员
     *
     * @param m
     * @return
     */
    void platAddCustomer(CustomerPO m);

    /**
     * 商户后台 - 编辑会员
     *
     * @param m
     * @return
     */
    void platEditCustomer(CustomerPO m);

    /**
     * 商户后台 - 冻结/激活 会员
     *
     * @param idList
     * @param activeState
     * @return
     */
    void handleFreeze(List<String> idList, String activeState);

    /**
     * 商户后台 - 查询会员列表（连表查询）
     */
    List<CustomerPO> queryCustomerList(QueryMessageDTO qm);

    /**
     * 商户后台 - 查询会员数量（连表查询）
     */
    int queryCustomerCount(QueryMessageDTO qm);

    /**
     * 查询会员的用户名/手机号/编号 是否已存在
     *
     * @param loginName
     * @return
     */
    boolean checkLoginNameExist(String loginName, String entityNo, String uuid);

    /**
     * 平台后台 - 重置会员密码
     *
     * @param sendMessage
     * @param password
     * @param uuids
     * @return
     */
    void modifyPassword(boolean sendMessage, String password, List<String> uuids);

    /**
     * 微信小程序注册会员
     *
     * @param data 手机号以及openid等微信账户信息
     * @return 会员信息 {@link CustomerPO}
     * @throws InvalidParamException 数据校验异常
     */
    CustomerPO wechatRegister(Map<String, Object> data) throws InvalidParamException;

    /**
     * 根据微信openid或者unionid查询会员
     * 当unionid不为空时，优先已unionid为条件查询
     *
     * @param vendorId  商户id
     * @param openid 微信openid
     * @param wxplat 微信平台 MP:公众号, APP: 小程序, OPEN:开放平台
     * @param unionid 微信unionid
     * @return 会员信息 {@link CustomerPO}
     */
    CustomerPO getByOpenidOrUnionid(String vendorId, String openid, String wxplat, String unionid);

    /**
     * 根据商户id查询商户的会员
     *
     * @param queryMessage 统一查询条件 {@link QueryMessageDTO}
     * @return 信息列表 {@link List}&lt;{@link Map}&lt;{@link String}, {@link Object}&gt&gt;
     */
    List<Map<String, Object>> getCustomerByVendorId(QueryMessageDTO queryMessage);

    /**
     * 根据商户id查询商户的会员的总数
     *
     * @param queryMessage 统一查询条件 {@link QueryMessageDTO}
     * @return 商户的会员总数
     */
    int getCustomerCountByVendorId(QueryMessageDTO queryMessage);

    /**
     * 更新会员手机号
     *
     * @param customerId 会员id
     * @param mobile     手机号
     * @return 会员信息 {@link CustomerPO}
     */
    CustomerPO updateMobile(String customerId, String mobile);
    
    
    /**
     * 根据时间统计商户的会员数
     * @param date
     * @param vendorUuid
     * @return
     */
    int getCustomerCountByDate(String date,String vendorUuid);

    /**
     * 查询会员详细资料
     * @param uuid
     * @return
     */
    CustomerPO getCustomerInfo(String uuid);

    /**
     * 设置备注
     * @param uuid
     * @param remark
     */
    void setRemark(String uuid,String remark);

    void updateCustomerOpenid(CustomerPO customer, String wxplat, String openid);
}
